home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / hity wydania / Ubuntu 9.10 PL / karmelkowy-koliberek-desktop-9.10-i386-PL.iso / casper / filesystem.squashfs / usr / share / system-config-printer / XmlHelper.py < prev    next >
Text File  |  2009-10-19  |  2KB  |  77 lines

  1. ## Copyright (C) 2008 Rui Matos <tiagomatos@gmail.com>
  2.  
  3. ## This program is free software; you can redistribute it and/or modify
  4. ## it under the terms of the GNU General Public License as published by
  5. ## the Free Software Foundation; either version 2 of the License, or
  6. ## (at your option) any later version.
  7.  
  8. ## This program is distributed in the hope that it will be useful,
  9. ## but WITHOUT ANY WARRANTY; without even the implied warranty of
  10. ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  11. ## GNU General Public License for more details.
  12.  
  13. ## You should have received a copy of the GNU General Public License
  14. ## along with this program; if not, write to the Free Software
  15. ## Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  16.  
  17. import os
  18. import libxml2
  19. from debug import *
  20.  
  21. class XmlHelper (object):
  22.     def __init__ (self, filename):
  23.         self.group_file_name = None
  24.         self.xml_doc = libxml2.newDoc ('1.0')
  25.         self.xml_doc.setRootElement (libxml2.newNode ("ospm-groups"))
  26.  
  27.         self.group_file_name = filename
  28.  
  29.         if not os.path.exists (self.group_file_name):
  30.             try:
  31.                 self.xml_doc.saveFormatFile (self.group_file_name, True)
  32.             except:
  33.                 nonfatalException ()
  34.         else:
  35.             try:
  36.                 self.xml_doc = libxml2.parseFile (self.group_file_name)
  37.             except:
  38.                 nonfatalException ()
  39.  
  40.     def write (self):
  41.         if self.xml_doc.saveFormatFile (self.group_file_name, True) == -1:
  42.             nonfatalException ()
  43.  
  44.     def __get_non_text_child (self, node):
  45.         child = node.children
  46.  
  47.         while child and child.isText:
  48.             child = child.next
  49.  
  50.         return child
  51.  
  52.     def __parse_groups (self, key):
  53.         current = self.xml_doc.getRootElement ().children
  54.         # FIXME: this does not work
  55.         #current = self.__get_non_text_child (current)
  56.  
  57.         group_list = []
  58.         while current:
  59.             if current.name == key:
  60.                 group_list.append ((current.prop ("name"), current))
  61.  
  62.             current = current.next
  63.  
  64.         return group_list
  65.  
  66.     def get_static_groups (self):
  67.         return self.__parse_groups ("static-group")
  68.  
  69.     def get_search_groups (self):
  70.         return self.__parse_groups ("search-group")
  71.  
  72.     def add_group (self, group_node):
  73.         self.xml_doc.getRootElement ().addChild (group_node)
  74.         self.write ()
  75.  
  76. xml_helper = XmlHelper (os.path.expanduser ('~/.printer-groups.xml'))
  77.